home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
351-375
/
disk_351
/
pdc
/
libsrc.lzh
/
LibSrc
/
Math
/
tan.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-04-07
|
3KB
|
95 lines
/************************************************************************
* *
* N O T I C E *
* *
* Copyright Abandoned, 1987, Fred Fish *
* *
* This previously copyrighted work has been placed into the *
* public domain by the author (Fred Fish) and may be freely used *
* for any purpose, private or commercial. I would appreciate *
* it, as a courtesy, if this notice is left in all copies and *
* derivative works. Thank you, and enjoy... *
* *
* The author makes no warranty of any kind with respect to this *
* product and explicitly disclaims any implied warranties of *
* merchantability or fitness for any particular purpose. *
* *
************************************************************************
*/
/*
* FUNCTION
*
* tan Double precision tangent
*
* KEY WORDS
*
* tan
* machine independent routines
* trigonometric functions
* math libraries
*
* DESCRIPTION
*
* Returns tangent of double precision floating point number.
*
* USAGE
*
* double tan (x)
* double x;
*
* INTERNALS
*
* Computes the tangent from tan(x) = sin(x) / cos(x).
*
* If cos(x) = 0 and sin(x) >= 0, then returns largest
* floating point number on host machine.
*
* If cos(x) = 0 and sin(x) < 0, then returns smallest
* floating point number on host machine.
*
* REFERENCES
*
* Fortran IV plus user's guide, Digital Equipment Corp. pp. B-8
*
*/
#include <stdio.h>
#include <math.h>
#include "pml.h"
static char funcname[] = "tan";
double
tan (x)
double x;
{
double sinx;
double cosx;
struct exception xcpt;
extern double sin ();
extern double cos();
sinx = sin (x);
cosx = cos (x);
if (cosx == 0.0) {
xcpt.type = OVERFLOW;
xcpt.name = funcname;
xcpt.arg1 = x;
if (!matherr (&xcpt)) {
fprintf (stderr, "%s: OVERFLOW error\n", funcname);
errno = ERANGE;
if (sinx >= 0.0) {
xcpt.retval = MAXDOUBLE;
}
else {
xcpt.retval = -MAXDOUBLE;
}
}
}
else {
xcpt.retval = sinx / cosx;
}
return( xcpt.retval );
}